刷题
- 实验室锁门了,因为清明节,剑指Offer在教室,大话数据结构在教室,所有书都在教室。。。。除了电脑,所以刷刷题吧;记一下笔记;
1 多态是对于什么的? (未完成)
下面函数到底输出什么呢?
我依稀记得一个道理,b是父类的引用,所以虽然用子类初始化,但是能用的也只有父类有的;也就是说引用b可以使用父类有的一切;但是不能调用子类里特殊的部分;但是,他可以调用子类重写的函数;这就是多态;
挺厉害的是吧,我们来模拟一下过程,由于继承,所以构造函数先调用父类的,实例函数,先去找父类的,然后父类一看,诶,你是儿子,扔回儿子的函数中;这就形成了多态;但有一个问题,就是变量;变量这个货是没有多态性的;也就是说直接b.baseName 肯定是父类的,想得到子类的必须要使用get方法;就像上面callName想使用自己家的baseName发现啥也没有;所以自然是null;
2 浮点型的比较
不可将浮点变量用“==”或“!=”与任何数字比较。
千万要留意,无论是float还是double类型的变量,都有精度限制。所以一定要避免将浮点变量用“==”或“!=”与数字比较,应该设法转化成“>=”或“<=”形式。
假设浮点变量的名字为x,应当将 if (x == 0.0) 转化为 if ((x>=-EPSINON) && (x<=EPSINON))
或者 if ( fabs(x) <=EPSINON) // fabs(x)取x的绝对值
其中EPSINON是允许的误差(即精度)。
一个实例
System.out.println(Math.pow(64, 1.0 / 3)); 输出为3.9999999999,不是4!!!!!
3 后台线程
将一个线程标记成daemon线程,意味着当主线程结束,并且没有其它正在运行的非daemon线程时,该daemon线程也会自动结束。
4 静态方法的调用 与静态变量
简单来说,即便对象是null,也可以调用类的静态方法
静态变量只能在类主体中定义,不能在方法中定义
5 变量放在那里
用new创建的对象在堆区
函数中的临时变量在栈去
java中的字符串在字符串常量区
6 垃圾回收
7 赋值
byte 最大是127;
boolean 不能是null
8 interface
只能用public+默认修饰词;什么private呀,protected呀,static都不能用
9 数据类型
- 基本数据类型(或叫做原生类、内置类型)8种:
整数:byte,short,int,long(默认是int类型) 浮点类型: float,double(默认是double类型) 字符类型:char 布尔类型:boolean
- 引用数据类型
数组,类,接口;
ps: string,数组都是对象啊,都已经有new关键字了!
扩展:
- 行为:
基本类型只是一个值,没有任何行为
对象类型有自己的行为 - 内存分配:
基本类型在栈内分配
对象在堆内分配
对象引用保存在栈内 - 引用与值:
基本类型是值类型,仅表示一个值,保存在栈内
引用类型分两部分,对象引用保存在栈内,对象保存在堆内,
访问变量,是使用的引用找对象
10 知识点
- final类的方法都不能是abstract,因为final类不能有子类
- throw用于抛出异常。
throws关键字可以在方法上声明该方法要抛出的异常,然后在方法内部通过throw抛出异常对象。 - web会话跟踪:cookie,session,地址重写,隐藏域
- 优先选用接口,尽量少用抽象类,抽象类和接口都不能被实例化。